package com.unity.bh3.service;

import com.unity.bh3.dto.InventoryItemDTO;
import com.unity.bh3.dto.PurchaseRequest;
import com.unity.bh3.dto.UserCharacterDTO;

import java.util.List;

/**
 * 背包服务接口
 */
public interface InventoryService {
    

    
    /**
     * 获取用户拥有的角色列表
     * @param userId 用户ID
     * @return 用户角色列表
     */
    List<UserCharacterDTO> getUserCharacters(Long userId);
    
    /**
     * 获取用户拥有的角色ID列表
     * @param userId 用户ID
     * @return 角色ID列表
     */
    List<Long> getUserCharacterIds(Long userId);
    

    
    /**
     * 添加物品到背包（带类型）
     * @param userId 用户ID
     * @param itemId 物品ID
     * @param quantity 数量
     * @param itemType 物品类型 (1:武器, 2:圣痕, 3:材料, 4:碎片)
     * @return 是否成功
     */
    boolean addItemToInventory(Long userId, Long itemId, Integer quantity, Integer itemType);
    
    /**
     * 根据物品类型获取背包物品ID列表
     * @param userId 用户ID
     * @param itemType 物品类型 (1:武器, 2:圣痕, 3:材料, 4:碎片)
     * @return 物品ID列表
     */
    List<Long> getInventoryItemIdsByType(Long userId, Integer itemType);
    
    /**
     * 添加角色到用户
     * @param userId 用户ID
     * @param characterId 角色ID
     * @return 是否成功
     */
    boolean addCharacterToUser(Long userId, Long characterId);
    
    /**
     * 删除背包物品
     * @param userId 用户ID
     * @param itemId 物品ID
     * @param quantity 删除数量
     * @return 是否成功
     */
    boolean removeItemFromInventory(Long userId, Long itemId, Integer quantity);
    
    /**
     * 批量删除背包物品（同一类型）
     * @param userId 用户ID
     * @param itemIds 物品ID列表
     * @param quantities 对应的删除数量列表
     * @param itemType 物品类型 (1:武器, 2:圣痕, 3:材料, 4:碎片)
     * @return 是否成功
     */
    boolean removeMultipleItemsFromInventory(Long userId, List<Long> itemIds, List<Integer> quantities, Integer itemType);
    
    /**
     * 删除用户角色
     * @param userId 用户ID
     * @param characterId 角色ID
     * @return 是否成功
     */
    boolean removeCharacterFromUser(Long userId, Long characterId);
    
    /**
     * 批量删除用户角色
     * @param userId 用户ID
     * @param characterIds 角色ID列表
     * @return 是否成功
     */
    boolean removeMultipleCharactersFromUser(Long userId, List<Long> characterIds);
}